using System;
using System.Collections.Generic;
using System.Xml.Serialization;

namespace DataAccessLayer
{
    [Serializable, XmlRoot("GameData")]
    public sealed class GameData
    {
        [XmlArray("Menus"), XmlArrayItem("Menu")]
        public List<GameMenu> Menus { get; set; }

        [XmlArray("Levels"), XmlArrayItem("Level")]
        public List<GameLevel> Levels { get; set; }

        [XmlArray("Protagonists"), XmlArrayItem("Protagonist")]
        public List<Protagonist> Protagonists { get; set; }

        [XmlArray("Enemies"), XmlArrayItem("Enemy")]
        public List<NormalEnemy> Enemies { get; set; }

        [XmlArray("MiniBosses"), XmlArrayItem("MiniBoss")]
        public List<MiniBossEnemy> MiniBosses { get; set; }

        [XmlArray("Bosses"), XmlArrayItem("Boss")]
        public List<BossEnemy> Bosses { get; set; }

        [XmlArray("Bullets"), XmlArrayItem("Bullet")]
        public List<BulletBase> Bullets { get; set; }

        [XmlArray("BulletEffects"), XmlArrayItem("BulletEffect")]
        public IEnumerable<EffectBase> Effects;

        [XmlArray("Weapons"), XmlArrayItem("Weapon")]
        public List<WeaponBase> Weapons { get; set; }

        [XmlArray("FighterPods"), XmlArrayItem("FighterPod")]
        public List<FighterPod> FighterPods { get; set; }

        [XmlArray("Shaders"), XmlArrayItem("Shader")]
        public List<Shader> Shaders { get; set; }

        public GameData()
        {
            Menus = new List<GameMenu>();

            Levels = new List<GameLevel>();

            Protagonists = new List<Protagonist>();

            Enemies = new List<NormalEnemy>();

            MiniBosses = new List<MiniBossEnemy>();

            Bosses = new List<BossEnemy>();

            Bullets = new List<BulletBase>();

            Weapons = new List<WeaponBase>();

            FighterPods = new List<FighterPod>();

            Shaders = new List<Shader>();
        }
    }
}